445. 两数相加 II
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外，这两个数字都不会以零开头。
https://leetcode.cn/problems/add-two-numbers-ii/description/

struct ListNode*ListRevase(struct ListNode*phead)
{
    struct ListNode*n1,*n2,*n3;
    n1=NULL;
    n2=phead;
    n3=n2->next;
    while(n2)
    {
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3)
        {
            n3=n3->next;
        }
    }
    return n1;
}
struct ListNode*_addTwoNumbers(struct ListNode*l1,struct ListNode*l2)
{
    struct ListNode*head=NULL,*tail=NULL;
    int carry=0;
    while(l1||l2)
    {
        int n1=l1?l1->val:0;
        int n2=l2?l2->val:0;
        int sum=n1+n2+carry;
        if(head==NULL)
        {
            head=tail=(struct ListNode*)malloc(sizeof(struct ListNode));
            tail->val=sum%10;
            tail->next=NULL;
        }
        else
        {
            tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));
            tail->next->val=(sum)%10;
            tail=tail->next;
            tail->next=NULL;
        }
        carry=sum/10;
        if(l1)
            l1=l1->next;
        if(l2)
            l2=l2->next;
    
    }
    if(carry)
    {
        tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));
        tail->next->val=carry;
        tail->next->next=NULL;
    }
    return head;
}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode*L1=ListRevase(l1);
    struct ListNode*L2=ListRevase(l2);
    return ListRevase(_addTwoNumbers(L1,L2));

}